//
//  BleManager.h
//  bleDemo
//
//  Created by zt on 2020/4/13.
//  Copyright © 2020 XB. All rights reserved.
//
/*
 说明：
 这个是蓝牙管理器的单例，用于扫描蓝牙，连接外设等
 每次连接外设的时间是2秒，尝试连接3次，如果3次都是失败，标识连接超时 分别用 connectTime connectCount控制
 */

#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
#import "BleDevice.h"
#import "FSBleConstants.h"
#import "FSBleDelegate.h"

@class BleManager;
@protocol BLEManagerDelegate;

#define UUID(x)        [CBUUID UUIDWithString:(x)]

#if (DEBUG == 1)
#define PLog(string, ...) NSLog(@"🔨 %@ <%d>🔥🔥 %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(string), ##__VA_ARGS__])
#else
#define PLog(string, ...)
#endif

//@class BLEManager;





NS_ASSUME_NONNULL_BEGIN


@interface BleManager : NSObject <CBCentralManagerDelegate, CBPeripheralDelegate>




/// 蓝牙扫描中
@property (nonatomic, readonly) BOOL isScaning;
/// 蓝牙状态，只有 BLEManagerStatePoweredOn 才能使用
@property (nonatomic, readonly) BleManagerState state;
/// 需要过滤的服务
@property (nonatomic, strong) NSMutableArray <CBUUID *> *filterServices;
/// 扫描得到的外设，会加入到这个数组容器中
@property (nonatomic, strong) NSMutableArray *devices;
/// 蓝牙的扫描时间，没有设置扫描时间，蓝牙会一直扫描，或者在连接上蓝牙的时应停止扫描  默认30秒
@property (nonatomic, assign) NSTimeInterval scanTimeInterval;

// 初始化方法
+ (BleManager *)managerWithDelegate:(id <FSCentralScanDelegate>)delegate;

/// 这个方法只是为了获取蓝牙中心的单例对象，初始化不能用这个方法
+ (BleManager *)manager;

/// 扫描外设，蓝牙未开启返回NO
- (BOOL)startScan;

/// 停止扫描
- (void)stopScan;

/// 清除未连接的设备
- (void)clean;


/// 取消连接连接设备
/// @param device 连接哪一台设备
- (void)disconnect:(BleDevice *)device;

/// 连接设备
/// @param device 连接哪一台设备
- (void)connect:(BleDevice *)device;


@end


NS_ASSUME_NONNULL_END
